Skip to content

userver: add limited-conn#654

Merged
MDA2AV merged 2 commits intoMDA2AV:mainfrom
botanegg:userver
Apr 27, 2026
Merged

userver: add limited-conn#654
MDA2AV merged 2 commits intoMDA2AV:mainfrom
botanegg:userver

Conversation

@botanegg
Copy link
Copy Markdown
Contributor

Description


PR Commands — comment on this PR to trigger (requires collaborator approval):

Command Description
/benchmark -f <framework> Run all benchmark tests
/benchmark -f <framework> -t <test> Run a specific test
/benchmark -f <framework> --save Run and save results (updates leaderboard on merge)

Always specify -f <framework>. Results are automatically compared against the current leaderboard.


Run benchmarks locally

You can validate and benchmark your framework locally with the lite script — no CPU pinning, fixed connection counts, all load generators run in Docker.

./scripts/validate.sh <framework>
./scripts/benchmark-lite.sh <framework> baseline
./scripts/benchmark-lite.sh --load-threads 4 <framework>

Requirements: Docker Engine on Linux. Load generators (gcannon, h2load, h2load-h3, wrk, ghz) are built as self-contained Docker images on first run.

@botanegg
Copy link
Copy Markdown
Contributor Author

/benchmark -f userver --save

@github-actions
Copy link
Copy Markdown
Contributor

👋 /benchmark request received. A collaborator will review and approve the run.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: userver | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 941,045 6400.8% 222MiB +165.1% +14.4%
baseline 4096 1,019,690 6304.8% 442MiB +1.1% +1.1%
pipelined 512 1,460,555 6712.7% 261MiB -5.5% +4.4%
pipelined 4096 1,334,710 6644.4% 842MiB -5.5% -4.4%
limited-conn 512 348,244 5630.3% 214MiB NEW NEW
limited-conn 4096 873,874 6316.5% 592MiB NEW NEW
static 1024 165,294 6614.5% 451MiB NEW NEW
static 4096 185,650 6427.8% 946MiB NEW NEW
static 6800 196,262 6302.2% 1.4GiB NEW NEW
Full log

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  10
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.69ms   4.03ms   8.17ms   15.30ms   25.50ms

  4359052 requests in 5.00s, 4359054 responses
  Throughput: 871.58K req/s
  Bandwidth:  119.69MB/s
  Status codes: 2xx=4359054, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4359552 / 4359054 responses (100.0%)
  Reconnects: 436384
  Per-template: 1453047,1453167,1452821
  Per-template-ok: 1453226,1453167,1452821
[info] CPU 6083.1% | Mem 590MiB

=== Best: 873874 req/s (CPU: 6316.5%, Mem: 592MiB) ===
[info] input BW: 67.50MB/s (avg template: 81 bytes)
[info] saved results/limited-conn/4096/userver.json
httparena-bench-userver
httparena-bench-userver
[info] skip: userver does not subscribe to json
[info] skip: userver does not subscribe to json-comp
[info] skip: userver does not subscribe to json-tls
[info] skip: userver does not subscribe to upload
[info] skip: userver does not subscribe to api-4
[info] skip: userver does not subscribe to api-16

==============================================
=== userver / static / 1024c (tool=wrk) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
Running 5s test @ http://localhost:8080
  64 threads and 1024 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     6.26ms    3.02ms  52.00ms   69.77%
    Req/Sec     2.59k   326.71    10.10k    97.46%
  839522 requests in 5.10s, 49.87GB read
Requests/sec: 164605.60
Transfer/sec:      9.78GB
[info] CPU 6549.8% | Mem 431MiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 1024 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     6.21ms    2.86ms  23.27ms   67.40%
    Req/Sec     2.60k   235.15     8.27k    97.36%
  842884 requests in 5.10s, 50.08GB read
Requests/sec: 165294.94
Transfer/sec:      9.82GB
[info] CPU 6614.5% | Mem 451MiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 1024 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     6.22ms    2.86ms  22.90ms   67.36%
    Req/Sec     2.59k   293.96    10.60k    98.04%
  840816 requests in 5.10s, 49.95GB read
Requests/sec: 164870.28
Transfer/sec:      9.79GB
[info] CPU 6611.2% | Mem 448MiB

=== Best: 165294 req/s (CPU: 6614.5%, Mem: 451MiB) ===
[info] saved results/static/1024/userver.json
httparena-bench-userver
httparena-bench-userver

==============================================
=== userver / static / 4096c (tool=wrk) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    22.16ms   10.55ms 115.34ms   68.57%
    Req/Sec     2.92k   361.33    11.57k    97.11%
  946747 requests in 5.10s, 56.24GB read
Requests/sec: 185650.28
Transfer/sec:     11.03GB
[info] CPU 6427.8% | Mem 946MiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    22.39ms   10.84ms 134.61ms   69.26%
    Req/Sec     2.90k   290.02     9.01k    96.68%
  938425 requests in 5.10s, 55.75GB read
Requests/sec: 184092.80
Transfer/sec:     10.94GB
[info] CPU 6587.1% | Mem 936MiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    22.20ms   10.26ms  97.70ms   68.22%
    Req/Sec     2.91k   309.00     8.46k    96.81%
  943134 requests in 5.10s, 56.03GB read
Requests/sec: 184879.48
Transfer/sec:     10.98GB
[info] CPU 6553.4% | Mem 943MiB

=== Best: 185650 req/s (CPU: 6427.8%, Mem: 946MiB) ===
[info] saved results/static/4096/userver.json
httparena-bench-userver
httparena-bench-userver

==============================================
=== userver / static / 6800c (tool=wrk) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    35.48ms   19.53ms 236.07ms   72.13%
    Req/Sec     3.07k   466.53    12.51k    97.48%
  994923 requests in 5.10s, 59.10GB read
Requests/sec: 195073.53
Transfer/sec:     11.59GB
[info] CPU 6467.6% | Mem 1.3GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    35.21ms   18.96ms 185.14ms   71.42%
    Req/Sec     3.09k   409.47    10.46k    96.47%
  1000872 requests in 5.10s, 59.46GB read
Requests/sec: 196177.52
Transfer/sec:     11.65GB
[info] CPU 6610.3% | Mem 1.3GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    35.32ms   19.80ms 219.40ms   71.29%
    Req/Sec     3.09k   412.02    15.32k    97.42%
  1001036 requests in 5.10s, 59.46GB read
Requests/sec: 196262.60
Transfer/sec:     11.66GB
[info] CPU 6302.2% | Mem 1.4GiB

=== Best: 196262 req/s (CPU: 6302.2%, Mem: 1.4GiB) ===
[info] saved results/static/6800/userver.json
httparena-bench-userver
httparena-bench-userver
[info] skip: userver does not subscribe to async-db
[info] skip: userver does not subscribe to crud
[info] skip: userver does not subscribe to baseline-h2
[info] skip: userver does not subscribe to static-h2
[info] skip: userver does not subscribe to baseline-h2c
[info] skip: userver does not subscribe to json-h2c
[info] skip: userver does not subscribe to baseline-h3
[info] skip: userver does not subscribe to static-h3
[info] skip: userver does not subscribe to gateway-64
[info] skip: userver does not subscribe to gateway-h3
[info] skip: userver does not subscribe to production-stack
[info] skip: userver does not subscribe to unary-grpc
[info] skip: userver does not subscribe to unary-grpc-tls
[info] skip: userver does not subscribe to stream-grpc
[info] skip: userver does not subscribe to stream-grpc-tls
[info] skip: userver does not subscribe to echo-ws
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-6800.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@botanegg
Copy link
Copy Markdown
Contributor Author

@MDA2AV ready to merge

could you update leaderboard with baseline improvements and new limited-conn and static benchmarks?

@MDA2AV MDA2AV merged commit 16fbcad into MDA2AV:main Apr 27, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants